package org.gudy.azureus2.ui.console.commands;

import java.io.PrintStream;
import java.util.List;

import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.ui.console.ConsoleInput;

import com.aelitis.azureus.core.pairing.PairingManager;
import com.aelitis.azureus.core.pairing.PairingManagerFactory;

public class Pairing extends IConsoleCommand {

    public Pairing() {
        super("pairing", "pair");
    }

    public String getCommandDescriptions() {
        return ("pairing\t\tpair\tShows and modified the current Vuze remote pairing state.");
    }

    public void printHelpExtra(PrintStream out, List args) {
        out.println("> -----");
        out.println("Subcommands:");
        out.println("enable\tEnable remote pairing");
        out.println("disable\tDisable remote pairing");
        out.println("> -----");
    }

    public void execute(String commandName, ConsoleInput ci, List<String> args) {

        PairingManager pm = PairingManagerFactory.getSingleton();

        if (args.size() > 0) {

            String sub = args.get(0);

            if (sub.equals("enable")) {

                pm.setEnabled(true);

            } else if (sub.equals("disable")) {

                pm.setEnabled(false);

            } else {

                ci.out.println("Unsupported sub-command: " + sub);

                return;
            }
        }

        ci.out.println("Current pairing state:");

        if (pm.isEnabled()) {

            ci.out.println("\tStatus:      " + pm.getStatus());

            try {
                ci.out.println("\tAccess code: " + pm.getAccessCode());

            } catch (Throwable e) {

                ci.out.println("Failed to get access code: " + Debug.getNestedExceptionMessage(e));
            }
        } else {
            ci.out.println("\tdisabled");
        }

    }
}
